Пульт.Онлайн /

Интеграция сторонних приложений в интерфейс

Как это работает
Настройка проксирования


Пульт.Онлайн позволяет интегрировать сторонние веб-сервисы и API в интерфейс сервера в виде экранов на основе произвольного HTML, используя механизм проксирования запросов. Это обеспечивает:

  • Автоматическую передачу данных аутентификации (SCADA добавляет в запросы к сторонним сервисам информацию о текущем пользователе).

  • Безопасное взаимодействие (клиентский код не обращается к сторонним сервисам напрямую, избегая CORS и проблем с COOKIES).

  • Бесшовную интеграцию в едином интерфейсе

    • Пользователи работают в привычном интерфейсе SCADA-системы с единой точкой аутентификации
    • Не требуется реализация авторизации и навигации на стороне подключаемых сервисов
    • JS, CSS и фреймворки позволяют реализовать сложные интерфейсы и подключать данные из сторонних БД, существенно расширяя возможности SCADA при минимуме затрат на разработку

Как это работает

  1. Клиентский браузер загружает экран на базе произвольного HTML с сервера Пульт.Онлайн. Возможен вариант загрузки с HTTP-сервера стороннего сервиса по проксированному URL.

  2. Клиентский код (JavaScript в произвольном HTML-экране) отправляет запрос не напрямую к внешнему API, а через специальный прокси-эндпоинт сервера Пульт.Онлайн:

    • Для HTTP: http(s)://<scada-server-host>/service/<имя-зарегистрированного-сервиса>
    • Для WebSocket: ws(s)://<scada-server-host>/service/<имя-зарегистрированного-сервиса>
  3. Сервер Пульт.Онлайн перехватывает запрос, добавляет в заголовки информацию о пользователе, включая группы (заголовок x-pult-user) и перенаправляет запрос к указанному стороннему сервису.

  4. Сторонний сервис получает запрос с валидными данными пользователя Пульт.Онлайн и возвращает ответ серверу

  5. Сервер Пульт.Онлайн возвращает ответ клиентскому браузеру

  6. Сторонний сервис также может работать с API сервера Пульт.Онлайн для выполнения фоновых задач (например, для сбора статистических и исторических данных для систем верхнего уровня). Авторизация, при этом, выполняется по API-ключу.

Диаграмма работы:

┌─────────────────┐          ┌──────────────────────┐         ┌───────────────────────┐
│                 │          │                      │         │                       │
│  Клиентский     │          │  SCADA Web-сервер    │         │  Стороннее веб-       │
│  браузер        │          │  (Прокси)            │         │  приложение / API     │
│                 │          │                      │         │                       │
└────────┬────────┘          └──────────┬───────────┘         └────────────┬──────────┘
         │                              │                                  │
         │ 1. Загрузка произвольного    │                                  │
         │    HTML-экрана с сервера     │                                  │
         │    (HTML+JS+CSS)             │                                  │
         ├─────────────────────────────►|                                  │
         │◄─────────────────────────────│                                  │
         │                              │                                  │
         │ 2. JS на экране              │                                  │
         │    отправляет запрос         │                                  │
         │    к `/service/myservice`    │                                  │
         ├─────────────────────────────►|                                  │
         │                              │                                  │
         │                              │ 3. SCADA добавляет заголовок     │
         │                              │    с данными пользователя        │
         │                              │    (x-pult-user)                 │
         │                              │    и проксирует запрос           │
         │                              ├─────────────────────────────────►|
         │                              │                                  │
         │                              │ 4. Ответ от стороннего сервиса   │
         │                              │◄─────────────────────────────────┤
         │                              │                                  │
         │ 5. Ответ возвращается        │                                  │
         │    клиенту через SCADA       │                                  │
         │◄─────────────────────────────┤                                  │
         │                              │                                  │
         │                              │                                  │
         │  (Аналогично для WebSocket)  │                                  │
         │                              │                                  │
         │  WS: `/service/myservice`    │                                  │
         ├─────────────────────────────►|                                  │
         │                              │                                  │
         │                              │  SCADA устанавливает             │
         │                              │  WS-соединение с добавлением     │
         │                              │  заголовка x-pult-user           │
         │                              ├─────────────────────────────────►|
         │                              │                                  │
         │                              │  Двусторонний обмен данными      │
         │◄─────────────────────────────┼─────────────────────────────────►│
         │                              │                                  │
         │                              │ 6. (Опционально) Работа          │
         │                              │  стороннего сервиса  в фоне      │
         │                              │  с API SCADA-сервера по API-Key  │
         │                              │◄─────────────────────────────────│
         │                              │─────────────────────────────────►│
         │                              │◄─────────────────────────────────│
         │                              │─────────────────────────────────►│
         │                              │                                  │

Настройка проксирования

  1. Создайте json-файл настроек, например, по адресу /pult_server/services/server/proxy_services.json. Настройте эндпоинты, например:

     [
         {
             "name":"accounting",
             "timeout":10000,
             "ws_proxy_url":"ws://127.0.0.1:8300/api",
             "http_proxy_url":"http://127.0.0.1:8300/ws",
             "enabled":1
         },
         {
             "name":"bms",
             "timeout":10000,
             "ws_proxy_url":"wss://bms.company.com/scada/integration",
             "http_proxy_url":"https://bms.company.com/scada/integration",
             "enabled":1
         },
     ]
    
  2. В настройках сервиса server в параметре proxy_services_file укажите путь к json-файлу, абсолютный или относительно папки /pult_server/services/server. В нашем примере файл уже лежит в папке /pult_server/services/server, поэтому указываем просто имя файла:

     proxy_services_file=proxy_services.json
    
  3. Сохраните настройки (сервис server будет автоматически перезапущен и примет новые настройки).

  4. Теперь все HTTP- и WS-запросы по URL /service/accounting будут перенаправлены на localhost:8300, а запросы по URL /service/bms на сервер bms.company.com.

  Email
  SMS
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   var_get
   var_list
   var_set